<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace Agp\CoreBundle\Manager;

use Agp\CoreBundle\Manager\BaseManager;
use Agp\CoreBundle\Entity\ItemVenda;
use Agp\CoreBundle\Entity\Venda;
use Agp\CoreBundle\Entity\Pedido;
use Agp\CoreBundle\Entity\FormaPagamento;
use Agp\CoreBundle\Entity\PedidoSite;
use Agp\CoreBundle\Entity\ListaPreco;

/**
 * Description of PedidoManager
 *
 * @author bondcs
 * 
 */
class PedidoManager extends BaseManager{

    public function gerarVenda(PedidoSite $pedidoSite, $situacao){

        foreach ($pedidoSite->getItemsComuns() as $key => $itemComum){
            
            if ($key == 0){
                $venda = new Venda;
                $venda->setEmpresa($itemComum->getEmpresa());
                $venda->setEvento($itemComum->getEvento());
                $venda->setPedido($pedidoSite->getPedido());
         
                $venda->setTipo(Venda::TP_ECOMMERCE);
                $venda->setSituacao($situacao);
            }
            
            for ($i = 0; $i < $itemComum->getQtdItem(); $i++){
                $item = new ItemVenda;
                $item->setLista($itemComum->getListaPreco());
                $item->setProduto($itemComum->getProduto());
                $item->setVlrItem($itemComum->getVlrItemNoTaxa());
                $item->setQtdItem(1);
                $item->setSubtotal($itemComum->getVlrItemNoTaxa());
                $item->setVenda($venda);
                $item->setNmTicket($itemComum->getNmTicket()+$i);
                $item->setSituacao($situacao);
                $venda->addItens($item);
            }
        }
        
        if (isset($venda))
        $this->em->persist($venda);
        
        foreach ($pedidoSite->getItemsPassaportes() as $key => $items){
            
            foreach ($items as $y => $itemPassaporte){
                
                if ($y == 0){
                    $venda = new Venda;
                    $venda->setEmpresa($itemPassaporte->getEmpresa());
                    $venda->setEvento($itemPassaporte->getEvento());
                    $venda->setPedido($pedidoSite->getPedido());

                    $venda->setTipo(Venda::TP_ECOMMERCE);
                    $venda->setSituacao($situacao);
                }

                for ($i = 0; $i < $itemPassaporte->getQtdItem(); $i++){
                    $item = new ItemVenda;
                    $item->setLista($itemPassaporte->getListaPreco());
                    $item->setProduto($itemPassaporte->getProduto());
                    $item->setVlrItem($itemPassaporte->getVlrItemNoTaxa());
                    $item->setQtdItem(1);
                    $item->setSubtotal($itemPassaporte->getVlrItemNoTaxa());
                    $item->setVenda($venda);
                    $item->setSituacao($situacao);
                    $item->setNmTicket($itemPassaporte->getNmTicket()+$i);

                    $venda->addItens($item);
                }
            }
            
            $this->em->persist($venda);
        }
        
        foreach ($pedidoSite->getItemsSetores() as $key => $itemSetor){
            
            if ($key == 0){
                $vendaSetor = new Venda;
                $vendaSetor->setEmpresa($itemSetor->getEmpresa());
                $vendaSetor->setEvento($itemSetor->getEvento());
                $vendaSetor->setPedido($pedidoSite->getPedido());
         
                $vendaSetor->setTipo(Venda::TP_ECOMMERCE);
                $vendaSetor->setSituacao($situacao);
            }
            
            for ($i = 0; $i < $itemSetor->getQtdItem(); $i++){
                    $item = new ItemVenda;
                    $item->setLista($itemSetor->getListaPreco()->getListaSuperPai());
                    $item->setSetor($itemSetor->getListaPreco());
                    $item->setProduto($itemSetor->getProduto());
                    $item->setVlrItem($itemSetor->getVlrItemNoTaxa());
                    $item->setQtdItem(1);
                    $item->setSubtotal($itemSetor->getVlrItemNoTaxa());
                    $item->setVenda($vendaSetor);
                    $item->setNmTicket($itemSetor->getNmTicket()+$i);
                    $item->setSituacao($situacao);
                    $vendaSetor->addItens($item);
            }
        }
        
        if (isset($vendaSetor)){
            $this->em->persist($vendaSetor);
        }
        
       $this->em->flush();
       $this->persist($pedidoSite);
    }
    
    public function updateWithSituacao($entity, $pedidoOld) {

        if ($entity->getSituacao() != $pedidoOld->getSituacao()){
            if ($entity->getSituacao() == Pedido::SIT_ANALIZE_CREDITO || $entity->getSituacao() == Pedido::SIT_APROVACAO_PGTO){
                $situacao = Venda::SIT_INATIVO;
            }elseif ($entity->getSituacao() == Pedido::SIT_PEDIDO_CANCELADO) {
                $situacao = Venda::SIT_CANCELADO;
            }elseif ($entity->getSituacao() == Pedido::SIT_PGTO_CONFIRMADO){
                if (!$entity->isTerminal())
                    $this->container->get('agp.email')->emailPgtoConfirmado($entity->getPedidoSite());
                
                if ($entity->getFormaPagamento() == FormaPagamento::F_BOLETO)
                    $entity->getPedidoSite()->setBoletoPgtoConfirmado(true);
                
                $situacao = Venda::SIT_ATIVO;
            }

            foreach ($entity->getVendas() as $venda){
                $venda->setSituacao($situacao);
                foreach ($venda->getItens() as $i){
                    $i->setSituacao($situacao);
                }
            }
            
            if ($entity->getSituacao() == Pedido::SIT_PEDIDO_CANCELADO){
                
                if ($entity->getFormaPagamento()->getFiliacao() == FormaPagamento::FI_CIELO){
                    $resposta = $this->container->get('agp.cielo')->cancelarTransacao($entity);
                    
                    if (!$resposta->isCanceled() AND $resposta->getCodigo() != 41)
                        throw new \Symfony\Component\HttpKernel\Exception\HttpException(500, $resposta->getCodigo().' - '.$resposta->getMsg());
                    
                    if (!$entity->isTerminal())
                        $this->container->get('agp.email')->emailPedidoCancelado($entity->getPedidoSite());
                }
                if ($entity->getFormaPagamento()->getFiliacao() == FormaPagamento::FI_REDE){
                    $resposta = $this->container->get('agp.rede')->cancelarTransacao($entity);
      
                    if (!$resposta->isCanceled())
                        throw new \Symfony\Component\HttpKernel\Exception\HttpException(500, $resposta->getMsg());
                    
                    if (!$entity->isTerminal())
                        $this->container->get('agp.email')->emailPedidoCancelado($entity->getPedidoSite());
                }
                
                if (!$entity->isTerminal()){
                   $this->atualizarSituacaoSetor($entity->getPedidoSite());
                }
                

            }

        }
        
        parent::update($entity);
    }
    
    public function atualizarSituacaoSetor($pedido, $comando = false){

        foreach ($pedido->getItems() as $i){

            if ($i->getListaPreco()->getTipo() == ListaPreco::TP_SETOR ){
                $listaManager = $this->container->get("agp.lista.manager");
                $setor = $i->getListaPreco();
                
                if ($setor->getSituacaoSetor() != ListaPreco::SIT_SETOR_DISPONIVEL)
                      $setor->setSituacaoSetor(ListaPreco::SIT_SETOR_DISPONIVEL);
        
               $listaManager->flush();
          }
        }
        
        if ($comando){
   
            foreach ($pedido->getPedido()->getVendas() as $venda){
                $venda->setSituacao(Venda::SIT_CANCELADO);
                foreach ($venda->getItens() as $i){
                    $i->setSituacao(Venda::SIT_CANCELADO);
                }
            }
            
            $pedido->getPedido()->setSituacao(Pedido::SIT_PEDIDO_CANCELADO);

            $this->container->get('agp.email')->emailPedidoCancelado($pedido);
            
            parent::update($pedido->getPedido());
            
        }
    }
}

?>
